package com.anhry.app.safety.manage.system.service;

import java.util.List;

import org.dom4j.Document;

import com.anhry.app.safety.manage.system.bean.TbSysFun;
import com.anhry.app.safety.manage.system.bean.TbUser;
import com.anhry.app.safety.manage.system.bean.TbUserDept;
import com.anhry.app.safety.manage.system.bean.TbUserRole;

/**
 * @date:2012-5-15
 * @remark:
 * @author:dongbin
 */
@SuppressWarnings("unchecked")
public interface SystemService {
	public void addOrUpdateInitDatas(String xmlFilePath);
	/**
	 * 根据用户名取得用户ID
	 * @param name 用户名
	 * @return
	 * @throws Exception
	 */
	public Long getUserDeptIdByUserDeptName(String name) throws Exception;
		
	/**
	 * 根据用户取得用户权限
	 * @param user
	 * @return
	 * @throws Exception
	 */
	public List getFunByUser(TbUser user)throws Exception;
	
	/**
	 * 所有菜单列表
	 * @return
	 * @throws Exception
	 */
	public List getFunList()throws Exception;
	
	/**
	 * 根据用户名称查询用户
	 * @param userName
	 * @return
	 * @throws Exception
	 */
	public TbUser getUserByUserName(String userName)throws Exception;
	
	/**
	 * 根据id，和用户名查询用户
	 * @param userId
	 * @param userName
	 * @return
	 * @throws Exception
	 */
	public TbUser existsUserName(String userId,String userName)throws Exception;
	
	
	/**
	 * 用户登录
	 * @param user
	 * @param userPwd
	 * @return
	 * @throws Exception
	 */
	public TbUser userLogin(TbUser user,String userPwd)throws Exception;
	
	/**
	 * 根据大菜单和当前用户的权限得到该菜单下所有该用户拥有的子菜单
	 * @param fun
	 * @param funList
	 * @return
	 * @throws Exception
	 */
	public List getChildFun(TbSysFun fun,List funList)throws Exception;
	
	/**
	 * 根据菜单得到该菜单下所有子菜单
	 * @param fun
	 * @return
	 * @throws Exception
	 */
	public List getChildFun(TbSysFun fun)throws Exception;
	
	/**
	 * 根据当前用户权限和权限模块编码查看该用户时候拥有该模块
	 * @param funList
	 * @param module
	 * @param permissionVaule
	 * @return
	 * @throws Exception
	 */
	public boolean hasPermissionByFunCode(List funList,String module,int permissionVaule)throws Exception;
	
	/**
	 * 根据当前用户和权限模块名称，细分权限类型，查询该用户时候拥有该权限
	 * @param user
	 * @param module
	 * @param permissionVaule
	 * @return
	 * @throws Exception
	 */
	public boolean hasPermissionByFunCode(TbUser user,String module,int permissionVaule)throws Exception;
	
	/**
	 * 取得所有角色列表
	 * @param clock 是否锁定
	 * @param num
	 * @param size
	 * @return
	 * @throws Exception
	 */
	public List getRoleList(String clock,int num,int size)throws Exception;
	
	/**
	 * 取得菜单清单
	 * @param funList
	 * @return
	 * @throws Exception
	 */
	public Document funTreeInit(TbUserRole role,List funList)throws Exception;
	
	/**
	 * 根据角色查询该角色的权限
	 * @param role
	 * @return
	 * @throws Exception
	 */
	public List getFunListByRole(TbUserRole role)throws Exception;
	
	/**
	 * 根据部门类型和地区行政区划代码查询部门列表
	 * @param cType
	 * @param deptCode
	 * @return
	 * @throws Exception
	 */
	public List getDeptList(String cType,String deptCode)throws Exception;
	
	/**
	 * 根据国标编码取得部门详细信息
	 * @param deptCode
	 * @return
	 * @throws Exception
	 */
	public TbUserDept getDeptByCode(String deptCode)throws Exception;
	
	/**
	 * 查询本系统用到的所有部门信息
	 * @return
	 * @throws Exception
	 */
	public List getAllDeptList()throws Exception;
	
	/**
	 * 取得用户列表
	 * @param hql
	 * @param num
	 * @param size
	 * @return
	 * @throws Exception
	 */
	public List getUserList(String hql,int start,int count)throws Exception;
	
	/**
	 * 取得用户级别列表
	 * @return
	 * @throws Exception
	 */
	public List getUserGradeList()throws Exception;
	
	/**
	 * 加载所有企业类型
	 * @return
	 * @throws Exception
	 */
	public List getCorpTypeList()throws Exception;
	
	/**
	 * 加载所有行业部门
	 * @return
	 * @throws Exception
	 */
	public List getDeptMainList()throws Exception;
	
	/**
	 * 加载所有县(市、区)、开发区列表
	 * @return
	 * @throws Exception
	 */
	public List getQuDeptList()throws Exception;
	
	/**
	 * 加载所有企业类型大类列表
	 * @return
	 * @throws Exception
	 */
	public List getMaxTypeList()throws Exception;
	
	/**
	 * 根据部门查询该部门下所有子部门
	 * @param dept
	 * @return
	 * @throws Exception
	 */
	public List getChildDeptList(TbUserDept dept)throws Exception;
	

}
